/**
 * @file rt_record.c
 * @author Linquan  
 * @brief  用于存放 实时信息：报警、故障......
 *      使用链表进行管理。
 * @version 1.0
 * @date 2024-09-13
 * 
 * @copyright Copyright (c) 2024
 * 
 */

#include "rt_record.h"

#include <stdio.h>

/**> 每个链表设计管理最大节点数量为 500 */
#define MAX_RECORD_DATA    500


typedef struct 
{
    list_head_node                          evt_list;   /**> 事件链表 */
    uint8_t                                 evt_num;    /**> 链表中的事件数量 */
    LIST_NODE_TYPE(REPORT_DATA_91A)         buff[MAX_RECORD_DATA];
}rt_evt_record_t;



rt_evt_record_t   RecordEvt[RecodMax];


/**
 * @brief 初始化相关事件链表
 * 
 * @return int 
 */
int rt_record_init() 
{  
    if(ARRY_SIZE(RecordEvt) != RecodMax)
    {
        error_log("the record enum number is not equle record list");
        return ERROR;
    }

    for ( int i = 0; i < RecodMax ; i++)
    {
        list_init_with_buff(&RecordEvt[i].evt_list ,\
                            &RecordEvt[i].buff,\
                            sizeof(LIST_NODE_TYPE(REPORT_DATA_91A))*MAX_RECORD_DATA,\
                            sizeof(LIST_NODE_TYPE(REPORT_DATA_91A))\
                            ) ;
    }
}

/**
 * @brief 事件链表头插事件
 * 
 * @param type 记录类型
 * @param evt  事件
 */
void record_add_list(record_type_t type, report_data_t evt)
{
   LIST_WRITE(REPORT_DATA_91A) (&RecordEvt[type].evt_list, HEAD_ADD,  evt);
}

/**
 * @brief 事件链表 正序按照指定索引读取事件
 * 
 * @param type 
 * @param index 
 * @param evt 
 * @return void
 */
void record_read(record_type_t type, uint16_t index, report_data_t *evt)
{
     LIST_READ(REPORT_DATA_91A)(&RecordEvt[type].evt_list, POSI_READ, index, evt) ;
}



/**
 * @brief Get the record evt num object
 * 
 * @param type 
 * @return int 
 */
int get_record_evt_num(record_type_t type)
{
    return RecordEvt[type].evt_num;
}





































